#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;

// bool func(int value){
//     return value > 10;
// }

void test(){
    vector<int> vec = {1, 3, 5, 4, 8, 9, 3, 4, 1};

    for_each(vec.begin(), vec.end(), [](int &value){
        value *= 2;
        cout << value << " ";
    });
    cout << endl;

    // remove_if(vec.begin(), vec.end(), func);

    // 使用lambda表达式
    // auto it_end = remove_if(vec.begin(), vec.end(), [](int value){
    //                 return value > 5;
    //             });

    // 使用bind绑定
    auto it_end = remove_if(vec.begin(), vec.end(), bind1st(less<int>(), 10));
    auto it_end = remove_if(vec.begin(), vec.end(), bind2nd(greater<int>(), 10));


    vec.erase(it_end, vec.end());
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
}


int main(){
    test();

    return 0;
}